package com.enba.boot.mq;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 发送者策略
 *
 * @param <T>
 */
public interface MessageSenderStrategy<T> {

  Logger logger = LoggerFactory.getLogger(MessageSenderStrategy.class);

  // 策略标识
  String getStrategyKey();

  /**
   * queue模式，点对点，集群消息,队列模式
   *
   * @param destinationName 队列名称
   * @param message 消息体
   */
  void sendMessageByQueue(String destinationName, String message);

  /**
   * topic模式，广播消息,主题模式
   *
   * @param topicName topic名称
   * @param message 消息体
   */
  void sendMessageByTopic(String topicName, String message);

  /**
   * topic模式，广播消息,主题模式
   *
   * @param topicName topic名称
   * @param message 消息体
   * @param key key
   */
  void sendMessageByTopic(String topicName, String message, String key);

  /**
   * queue模式，点对点，集群模式消息,队列模式
   *
   * @param destinationName 队列名称
   * @param messageInteface 消息体
   */
  default void sendMessageByQueue(String destinationName, MessageInteface<T> messageInteface) {}

  /**
   * topic模式，广播消息,主题模式
   *
   * @param topicName topic名称
   * @param messageInteface 消息体
   */
  default void sendMessageByTopic(String topicName, MessageInteface<T> messageInteface) {}
}
